package com.ruoyi.cs.mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ruoyi.cs.domain.TRecharge;
import com.ruoyi.cs.domain.vo.PersonalBillVo;
import com.ruoyi.cs.domain.vo.TRechargeCountVo;
import com.ruoyi.cs.domain.vo.TRechargeVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;

/**
 * 充值记录Mapper接口
 * 
 * @author ruoyi
 * @date 2021-03-25
 */
public interface TRechargeMapper 
{
    /**
     * 查询充值记录
     * 
     * @param czId 充值记录ID
     * @return 充值记录
     */
    public TRecharge selectTRechargeById(String czId);

    /**
     * 查询充值记录列表
     * 
     * @param tRecharge 充值记录
     * @return 充值记录集合
     */
    public List<TRecharge> selectTRechargeList(TRecharge tRecharge);

    /**
     * 新增充值记录
     * 
     * @param tRecharge 充值记录
     * @return 结果
     */
    public int insertTRecharge(TRecharge tRecharge);

    /**
     * 修改充值记录
     * 
     * @param tRecharge 充值记录
     * @return 结果
     */
    public int updateTRecharge(TRecharge tRecharge);

    /**
     * 删除充值记录
     * 
     * @param czId 充值记录ID
     * @return 结果
     */
    public int deleteTRechargeById(String czId);

    /**
     * 批量删除充值记录
     * 
     * @param czIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteTRechargeByIds(String[] czIds);

    /**
     * 统计某用户该时间范围内的充值总额
     * @param userId
     * @param startTime
     * @param endTime
     * @return
     */
    public BigDecimal czMoneyCountByUserId(@Param("userId") String userId,@Param("startTime") Date startTime,@Param("endTime") Date endTime);


    /**
     * 统计某用户该时间范围内的充值总额
     * @param userId
     * @return
     */
    public BigDecimal selectTheDayCzCountByUserId(String userId);

    /**用户当月充值*/
    public BigDecimal selectTheMonthCzCountByUserId(String userId);

    /**
     * 修改充值记录表  异步回调
     * @param tRecharge
     * @return
     */
    public int updateTRechargeNotify(TRecharge tRecharge);

    /**
     * 获取过期的充值记录
     * @return
     */
    public List<TRecharge> getExpireList();

    /**
     * 批量修改充值状态
     * @param list
     * @return
     */
    public int batctUpdateCZStatus(@Param("list") List<TRecharge> list);

    /**
     * 统计充值总金额、总笔数
     * @return
     */
    public Map<String, BigDecimal> countTRechargeTotalByCondition(TRechargeVo tRechargeVo);


    /**
     * 统计充值当日总金额
     * @return
     */
    public Map<String, BigDecimal> countTRechargeTodayByCondition(TRechargeVo tRechargeVo);

    /**
     * 充值记录列表
     * @param tRechargeVo
     * @return
     */
    public List<TRechargeVo> trechargeListBack(TRechargeVo tRechargeVo);

    /**
     * 后台充值列表
     * @param tRechargeVo
     * @return
     */
    public List<TRechargeVo> listBack(TRechargeVo tRechargeVo);


    public String myTgRechargeToday(String userPromotersCode);

    public String myTgRechargeTotal(String userPromotersCode);

    public List<PersonalBillVo> getPersonalBill(PersonalBillVo personalBillVo);

    public List<TRecharge> integrationPayExpireList (@Param("time") String time);

    /**
     * 充值待确认列表
     *
     * @param czStatus   充值状态  0  待确认中  1  成功  2 失败
     * @param czPlatform 充值平台 0 聚合支付  1汇潮支付
     * @param time       时间
     * @return
     */
    public List<TRecharge> paymentListToBeConfirmed(@Param("czStatus") String czStatus, @Param("czPlatform") String czPlatform, @Param("time") String time);


    /**
     * 获取被推广带动的充值金额
     * @param userId
     * @param startTime
     * @param endTime
     * @return
     */
    public BigDecimal czMoneyCountTGByUserId(@Param("userId") String userId,@Param("userPromotersId") String userPromotersId,@Param("startTime") Date startTime,@Param("endTime") Date endTime);

    /**
     * 用户区间范围充值
     * @param userId
     * @param startTime
     * @param endTime
     * @return
     */
    public BigDecimal userCzMoneyRange(@Param("userId") String userId,@Param("startTime") String startTime,@Param("endTime") String endTime);

}
